package com.woniu.product.controller;


import cn.hutool.core.bean.BeanUtil;
import com.woniu.core.exception.account.AccountException;
import com.woniu.core.exception.account.AccountExceptionCode;
import com.woniu.core.util.JwtUtil;
import com.woniu.core.util.PageInfo;
import com.woniu.core.util.RedisUtil;
import com.woniu.core.util.Result;
import com.woniu.product.client.AccountServerClient;
import com.woniu.product.dto.TCourseTypeQueryDto;
import com.woniu.product.form.TCourseTypeChangeNameForm;
import com.woniu.product.form.TCourseTypeChangeStateForm;
import com.woniu.product.form.TCourseTypeInsertForm;
import com.woniu.product.form.TCourseTypeQueryForm;
import com.woniu.product.model.TCourseType;
import com.woniu.product.param.ReuseTCourseTypeChangeParam;
import com.woniu.product.param.TCourseTypeInsertParam;
import com.woniu.product.param.TCourseTypeQueryParam;
import com.woniu.product.service.TCourseTypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Set;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 吴彦祖
 * @since 2024年04月02日
 */
@RestController
@RequestMapping("/tCourseType")
@Api(tags = "课程类别")
public class TCourseTypeController {

    @Resource
    private TCourseTypeService tCourseTypeService;

    @Resource
    private AccountServerClient accountServerClient;

    @Resource
    private RedisUtil redisUtil;

    //新增类别(已测)
    @PostMapping("/insert")
    @ApiOperation("新增课程类别")
    public Result insert(@RequestBody TCourseTypeInsertForm form,@RequestHeader String token) throws Exception{
        //取id
        String refreshToken = redisUtil.get(token);
        int adminId = Integer.parseInt(JwtUtil.parseToken(refreshToken,1).get("adminId").toString());
        Result result = accountServerClient.queryAdminNameById(adminId);
        if (result.getCode()!=200){
            throw new AccountException(AccountExceptionCode.NOT_FIND_THIS_ADMIN);
        }
        String name = (String) result.getData();
        TCourseTypeInsertParam param = BeanUtil.toBean(form, TCourseTypeInsertParam.class);
        param.setCreateAdmin(name);
        TCourseType type = tCourseTypeService.insert(param);

        return Result.getResult(TCourseType.class).setMsg("新增课程类别成功").setData(type);
    }

    //根据id/ids删除课程类别(已测)
    @PostMapping("/deleteByIds")
    @ApiOperation("根据ids删除课程类别")
    public Result<List<TCourseType>> deleteByIds(@RequestBody Set<Integer> ids) throws Exception{
        List<TCourseType> types = tCourseTypeService.deleteByIds(ids);
        return Result.getListResult(TCourseType.class).setMsg("删除成功").setData(types);
    }

    //根据id修改课程名称（已测）
    @PostMapping("/changeNameById")
    @ApiOperation("根据id修改课程名称")
    public Result<TCourseType> changeNameById(@RequestBody TCourseTypeChangeNameForm form) throws Exception{
        TCourseType type = tCourseTypeService.changeById(BeanUtil.toBean(form, ReuseTCourseTypeChangeParam.class));
        return Result.getResult(TCourseType.class).setMsg("修改名称成功").setData(type);
    }

    //根据id修改课程类别状态（已测）
    @PostMapping("/changeStateById")
    @ApiOperation("根据id修改课程类别状态")
    public Result<TCourseType> changeStateById(@RequestBody TCourseTypeChangeStateForm form) throws Exception{
        TCourseType type = tCourseTypeService.changeById(BeanUtil.toBean(form, ReuseTCourseTypeChangeParam.class));
        return Result.getResult(TCourseType.class).setMsg("修改状态成功").setData(type);
    }
    //根据课程类别id查询课程类别（已测）
    @GetMapping("/queryTypeById/{courseTypeId}")
    @ApiOperation("根据课程类别id查询课程类别")
    public Result<TCourseType> queryTypeById(@PathVariable("courseTypeId")Integer courseTypeId) throws Exception{
        TCourseType type = tCourseTypeService.queryTypeById(courseTypeId);
        return Result.getResult(TCourseType.class).setMsg("查询type成功").setData(type);
    }
    //查询所有课程类别/带条件查询（已测）
    @PostMapping("/queryAll")
    @ApiOperation("查询所有课程类别/带条件查询")
    public Result<PageInfo> queryAll(@RequestBody TCourseTypeQueryForm form) throws Exception{
        PageInfo<TCourseTypeQueryDto> info = tCourseTypeService.queryAll(BeanUtil.toBean(form, TCourseTypeQueryParam.class));
        return Result.getResult(PageInfo.class).setMsg("查询成功").setData(info);
    }


}

